//通过rollup.js打包 

//1.引入相关依赖
import ts from 'rollup-plugin-typescript2' //解析ts
import json from '@rollup/plugin-json' //解析json
import resolvePlugin from '@rollup/plugin-node-resolve'   //解析第三方插件 
import path from 'path';

import { fileURLToPath } from 'url';
import { dirname } from 'path';
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
//获取 __dirname  import.meta.url 获取当前模块的 URL，然后使用 fileURLToPath 函数将其转换为文件路径，再用 path.dirname 获取目录名。
// 获取当前模块的文件路径
const __filename = fileURLToPath(import.meta.url);
// 获取当前模块的目录名
const __dirname = dirname(__filename);

//2.获取文件路径
let packagesDir = path.resolve(__dirname, "packages");
//获取需要打包 的包  process.env是在 Node.js 环境中访问环境变量的一种方式     TARGET 是环境变量的一个名称(build.js文件传过来的)
let packageDir = path.resolve(packagesDir, process.env.TARGET);

//2.2获取到每个包的打包配置(package.json)
let resolve = p => path.resolve(packageDir, p);
const pkg = require(resolve('package.json'));
const name = path.basename(packageDir)


//3.创建一个打包配置映射表
const outputOptions = {
    "esm-bundler": {
        file: resolve(`dist/${name}.esm-bundler.js`),
        format: 'es'
    },
    "cjs": {
        file: resolve(`dist/${name}.cjs.js`),
        format: 'cjs'
    },
    "global": {
        file: resolve(`dist/${name}.global.js`),
        format: 'iife'
    }
}

const options = pkg.buildOptions

function createCOnfig(format, output) {
    //进行打包
    output.name = options.name;
    output.sourcemap = true;
    //生成rollup配置
    return {
        input: resolve(`src/index.ts`), //入口
        output, //输出
        plugins:[
            json(), //解析json
            ts({
                tsconfig:path.resolve(__dirname,'tsconfig.json')
            }), //解析ts
            resolvePlugin() //解析第三方插件
        ]  
    }
}


// rollup需要导出一个配置
export default options.formats.map(format => createCOnfig(format, outputOptions[format]))


